package com.config.service;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.Map;

import javax.annotation.Resource;

import org.springframework.stereotype.Service;

import com.config.dao.LineConfigDao;
import com.config.dao.ShiftConfigDao;
import com.config.entity.ShiftConfig;

@Service(value="shiftConfigService")
public class ShiftConfigServiceImpl implements  ShiftConfigService{

	@Resource(name = "shiftConfigDao")
	private ShiftConfigDao shiftConfigDao;
	@Resource(name = "lineConfigDao")
	private LineConfigDao lineConfigDao;
	
	@Override
	public void save(ShiftConfig entity) {
		shiftConfigDao.save(entity);
	}
	
	@Override
	public void saveShift(ShiftConfig entity,Map<String, Object> model) {
		Date startTime=entity.getStartTime();
		Date endTime=entity.getEndTime();
		SimpleDateFormat ft = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		SimpleDateFormat fd = new SimpleDateFormat("yyyy-MM-dd");
		try {
			Long startT=ft.parse(ft.format(startTime)).getTime();
			Long endT=ft.parse(ft.format(endTime)).getTime();
			Long currentT=fd.parse(fd.format(startTime)).getTime();
			if(startT>endT){
				model.put("success", false);
				model.put("msg", "开始时间不能大于结束时间");
			}else if(endT>currentT+24*3600000){
				model.put("success", false);
				model.put("msg", "班次结束时间不能长于一天时间");
			}else{
				shiftConfigDao.save(entity);
				model.put("success", true);
				model.put("msg", "保存班次成功");
			}
			
		} catch (ParseException e1) {
			e1.printStackTrace();
		}
	}


	@Override
	public void update(ShiftConfig entity) {
		shiftConfigDao.update(entity);
	}

	@Override
	public void delete(int id) {
		shiftConfigDao.delete(id);
	}
	
//	@Override
//	public void deleteByShiftsId(int ShiftsId,Map<String, Object> model) {
//		ShiftConfig shifts=shiftConfigDao.get(ShiftsId);
//		List<ShiftConfig> shift=new ArrayList<ShiftConfig>();
//		if(shifts.getIsEffective().equals("N")){
//			shift=shiftConfigDao.findByShiftsId(shifts.getId());
//			if(shift.size()>0){
//				for(ShiftConfig e:shift){
//					shiftConfigDao.delete(e.getId());
//				}
//			}
//			shiftConfigDao.delete(shifts.getId());
//			model.put("success", true);
//			model.put("msg", "删除成功");
//		}else{
//			model.put("success", false);
//			model.put("msg", "有效节点，不能删除");
//		}
//				
//	}

	@Override
	public ShiftConfig getShiftConfig(int id) {
		return shiftConfigDao.get(id);
	}


	@Override
	public ShiftConfig findShiftsByLineId(int lineId,String belongTime) {
		return shiftConfigDao.findShiftsByLineId(lineId,belongTime);
	}


	@Override
	public List<ShiftConfig> findByShiftsId(int fatherId) {
		return shiftConfigDao.findByShiftsId(fatherId);
	}

	@Override
	public List<ShiftConfig> findShifts(int lineId) {
		return shiftConfigDao.findShifts(lineId);
	}


	@Override
	public int countByFatherId(Integer fatherId) {
		return shiftConfigDao.countByFatherId(fatherId);
	}

	@Override
	public List<ShiftConfig> findByLineTreePage(Integer lineId, int start,
			int limit) {
		List<ShiftConfig> structure=shiftConfigDao.findByLineTreePage(lineId, start, limit);
		if(structure.size()>0){
			for(ShiftConfig e:structure){
				List<ShiftConfig> child=shiftConfigDao.findByShiftsId(e.getId());
				if(child.size()>0){
					e.setChildren(child);
				}
				e.setLineName(lineConfigDao.get(e.getLineId()).getName());
			}
		}
		return structure;
	}

	@Override
	public int countByLineTreePage(Integer lineId) {
		return shiftConfigDao.countByLineTreePage(lineId);
	}

	@Override
	public boolean checkVertherRepeat(Integer id) {
		SimpleDateFormat sdf = new SimpleDateFormat("HH:mm");
		List<ShiftConfig> list=shiftConfigDao.findByShiftsId(id);
		int flag=0;
		String startTime="";
		String endTime="";
		String checkEnd="";
		if(list.size()>0){
			for(int i=0;i<list.size();i++){
				String st=sdf.format(list.get(i).getStartTime());
				String et=sdf.format(list.get(i).getEndTime());
				if(startTime==""&&endTime==""){
					startTime=st;
					endTime=et;
					checkEnd=et;
				}else{
					checkEnd=et;
					if(endTime.equals(st)){
						endTime=et;
						continue;
					}else{
						flag++;
						break;
					}
				}
			}
		}else{
			return false;
		}
		if(flag>0){
			return false;
		}else{
			if(startTime.equals(checkEnd)){
				return true;
			}else{
				return false;
			}
		}
	}

	@Override
	public ShiftConfig getEffectiveOne(Integer lineId) {
		return shiftConfigDao.getEffectiveOne(lineId);
	}

}
